package com.demo904_水果成篮;

import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) {
        int[] ints = {0, 0, 2, 2};
        int i = totalFruit(ints);
        System.out.println(i);
    }

    public static int totalFruit(int[] fruits) {
        ArrayList<Integer> list = new ArrayList<>();
        int max = 0;
        int count = 0;

        for (int i = 0; i < fruits.length; i++) {
            if (list.size() < 2) {
                list.add(fruits[i]);  // 奇怪了, 讲道理是要判断一下才可以的, 判断是不是已经存在,如果存在的话,就不用添加了~
                count++;
            } else {
                // 当种类已经是2的时候, 需要判断当前要添加的元素,是否在篮子中已经存在,
                // 如果存在, 那么直接数量加一;  如果不存在那么需要把不是上一个元素的元素移除掉, 然后把当前元素加进去,并且重新计算count值
                if (list.contains(fruits[i])) {
                    count++;
                } else {
                    // 收集结果
                    max = max == 0 ? count : Math.max(max, count);
                    // 移除掉非 i-1 的下标的元素
                    int notRemove = fruits[i - 1];
                    int index = list.indexOf(notRemove);

                    list.remove(1 - index);
                    // 回退计算 i-1 下标的重复元素个数
                    count = 1;
                    int j = i - 1;
                    while (j - 1 >= 0 && fruits[j - 1] == fruits[j]) {  // 其实是有点不够好, 应该要可以优化的~  就是需要添加2个参数
                        j--;
                        count++;
                    }
                    // 数量 count + 1 , 加的是 这个 当前要加入的值
                    list.add(fruits[i]);
                    count++;
                }
            }

        }

        return max == 0 ? count : Math.max(max, count);
    }
}
